// 登录与注册页面的数据仓库
import { reqgetCode, requserRegister, reqUserLogin, reqUserInfo,reqLoginOut} from '@/api'
// import { Promise } from 'core-js'

const state = {
  code: "",
  token: localStorage.getItem('TOKEN'),
  // 用户信息
  userInfo:{}
}
const mutations = {
  //验证码
  GETCODE(state, code){
    //获取的数据赋值给state
    state.code = code
  },

  // token
  USERLOGIN(state, token) {
    state.token = token
  },

  //获取用户信息
  GETUSERINFO(state,userInfo){
    state.userInfo=userInfo
  },

  //退出登录清除本地数据
  CLEAR(state){
  // 清除vuex仓库的token和用户数据
    state.token='',
    state.userInfo={},
  // 清除用户储存本地的token
  localStorage.removeItem('TOKEN')
  }

}
const actions = {
 // 获取验证码
  async getCode({ commit }, phone) {
    //这个接口返回验证码，正常是由后端操作的 ，
    let result = await reqgetCode(phone);
    // alert(result.data)

    // 请求成功or失败
    if (result.code == 200) {
      commit('GETCODE', result.data)
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },

  // 用户注册
  async userRegister_1({commit}, user) {
    let result = await requserRegister(user)

    // 请求成功后无须返回数据
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error("fsile"))
    }
  },

  //用户登录【生成token】
  async userLogin({commit},data) {
    let result = await reqUserLogin(data)
    // 服务器下发token,用户登录表示符
    // 业务中经常通过token找服务器要用户的信息展示
    if (result.code == 200) {
      commit('USERLOGIN', result.data.token)
    // 持久存储token
localStorage.setItem('TOKEN',result.data.token)

      return 'ok'
    } else {
      return Promise.reject(new Error('faila'))
    }
  },

  // 获取用户信息【token验证】
async getUserInfo({commit}){
  let result= await  reqUserInfo()
if(result.code==200){
  //请求成功 提交用户信息
  commit('GETUSERINFO',result.data)
  return 'ok'
} else{
  return Promise.reject(new Error('faile'))
}},

  // 退出登录
async  getLoginOut({commit}){ 
  // 向服务器发起请求，清除服务器用户信息、token 
  let result=await reqLoginOut()
if(result.code==200){
//提交mutations中清除用户登录储存的信息
  commit('CLEAR')
   return 'ok'
}else{
   return Promise.reject(new Error('faile'))

}}

}
const getters = {}
 
// 对外暴露在引入大的vuex仓库中
export default {
  state,
  mutations,
  actions,
  getters

}